// Tags: Possibility
#include <algorithm>
#include <cstdio>
#include <vector>
#define lowbit(x) (x & (-x))

typedef long double ll;
const int N = 5e5 + 5;
int n, m;
ll val[N], p;
std::vector<int> lad[N];

inline void modify(int x, ll v) {
  while (x <= n) {
    val[x] += v;
    x += lowbit(x);
  }
}

inline ll query(int x) {
  ll res = 0;
  while (x) {
    res += val[x];
    x -= lowbit(x);
  }
  return res;
}

inline ll qpow(ll base, int exp) {
  ll res = 1;
  while (exp) {
    if (exp & 1) res *= base;
    base *= base;
    exp >>= 1;
  }
  return res;
}

int main() {
#ifndef ONLINE_JUDGE
#ifdef LOCAL
  freopen("testdata.in", "r", stdin);
  freopen("testdata.out", "w", stdout);
#else
  freopen("P6089 [JSOI2015]非诚勿扰.in", "r", stdin);
  freopen("P6089 [JSOI2015]非诚勿扰.out", "w", stdout);
#endif
#endif

  scanf("%d%d%Lf", &n, &m, &p);
  for (int i = 1, a, b; i <= m; ++i) {
    scanf("%d%d", &a, &b);
    lad[a].push_back(b);
  }
  ll ans = 0, P;
  for (int i = 1; i <= n; ++i) {
    if (!lad[i].empty()) {
      std::sort(lad[i].begin(), lad[i].end());
      P = p / (1 - qpow(1 - p, lad[i].size()));
      for (auto &iter : lad[i]) {
        ans += (query(n) - query(iter)) * P;
        P *= (1 - p);
      }
      P = p / (1 - qpow(1 - p, lad[i].size()));
      for (auto &iter : lad[i]) {
        modify(iter, P);
        P *= (1 - p);
      }
    }
  }
  printf("%.2Lf", ans);
  return 0;
}